#ifndef _LINKLIST_H_
#define _LINKLIST_H_

#define ElementType int


class LinkList
{
private:
    //节点
struct Node
{
    ElementType data; //数据域
    Node * next;      //指针域
};  
    Node* Reserve2(Node *node);
    Node* Getend();
    void FastSort(Node *start,Node *end);
    Node *head; //头指针
    int size;   //节点数量
    
public:
    LinkList();
    ~LinkList();
    inline Node* CreateNode(ElementType element);
    
    void InsertTail(ElementType element);
    void InsertHead(ElementType element);
    void InsertByIndex(int index,ElementType element);

    //按位置删除
    void RemoveByIndex(int index);
    //按值删除
    void RemoveByElement(ElementType element);

    //修改位置上的值
    void UpdateByIndex(int index,ElementType newValue);
    //按值修改
    void UpdateByElement(ElementType oldValue,ElementType newValue);

    //按位置查找值
    ElementType& operator[](int index);

    void BubbleSort();
    void FastSort();

    //归并
    LinkList Merge(const LinkList& l);
    //
    void Reserve();
    //
    void Reserve2();
    void show();

};

#endif